Some existing systems enable the transfer of virtual machines (VMs) from one host to another host. Referred to as migration, these existing systems rely on a centralized server to manage the migration. For example, the centralized server maintains statistics received periodically from each of the hosts, such as resource utilization (e.g., processor, memory, power, etc.), overload condition, underload condition, the quantity of executing VMs, statistics associated with each of the VMs, and more. Using these statistics, the centralized server makes migration decisions and coordinates the migrations of the VMs from one host to another.
While advantageous in some scenarios, the existing centralized approach has drawbacks. For example, the centralized approach is subject to a single point of failure such that migration fails if the server running the centralized logic fails. Further, the validity, applicability, and usefulness of the migration decisions depends on the tuning of the time gap associated with the statistics gathered from the hosts. That is, the centralized server may rely on stale statistics when making migration decisions resulting in decisions that have less benefit to the datacenter.
In some other existing systems, a pool of hosts continually synchronize their status with each other to enable migration decisions. While the statistics are kept current in these systems, the increased amount of network traffic required to support the continual status updates produces slower network response times, increased likelihood of failure, and increased costs.